Newer
Older
Simple-Multiplayer-Unity3D / Multiplayer Project / Library / PackageCache / [email protected] / Editor / Settings / OtherOptionsFoldout.cs
using System;

using UnityEditor;
using UnityEngine;

using PlasticGui;
using Unity.PlasticSCM.Editor.UI;

namespace Unity.PlasticSCM.Editor.Settings
{
    class OtherOptionsFoldout
    {
        internal void OnActivate()
        {
            PlasticGuiConfigData data = PlasticGuiConfig.Get().Configuration;

            mNewCodeReviewCreateAndOpenInDesktop = data.NewCodeReviewBehavior == NewCodeReviewBehavior.CreateAndOpenInDesktop;
            mNewCodeReviewRequestReviewInUnityCloud = data.NewCodeReviewBehavior == NewCodeReviewBehavior.RequestFromUnityCloud;
            mNewCodeReviewAskAlways = data.NewCodeReviewBehavior == NewCodeReviewBehavior.Ask;
        }

        internal void OnDeactivate()
        {
            PlasticGuiConfig plasticGuiConfig = PlasticGuiConfig.Get();
            plasticGuiConfig.Configuration.NewCodeReviewBehavior = GetSelectedNewCodeReviewBehavior();
            plasticGuiConfig.Save();
        }

        internal void OnGUI()
        {
            DrawSplitter.ForWidth(UnityConstants.SETTINGS_GUI_WIDTH);

            DrawSettingsSection(DoNewCodeReviewBehaviorSettings);
        }

        internal void SelectNewCodeReviewBehaviorForTesting(NewCodeReviewBehavior shelveBehavior)
        {
            mNewCodeReviewCreateAndOpenInDesktop = shelveBehavior == NewCodeReviewBehavior.CreateAndOpenInDesktop;
            mNewCodeReviewRequestReviewInUnityCloud = shelveBehavior == NewCodeReviewBehavior.RequestFromUnityCloud;
            mNewCodeReviewAskAlways = shelveBehavior == NewCodeReviewBehavior.Ask;
        }

        NewCodeReviewBehavior GetSelectedNewCodeReviewBehavior()
        {
            if (mNewCodeReviewCreateAndOpenInDesktop)
                return NewCodeReviewBehavior.CreateAndOpenInDesktop;

            if (mNewCodeReviewRequestReviewInUnityCloud)
                return NewCodeReviewBehavior.RequestFromUnityCloud;

            return NewCodeReviewBehavior.Ask;
        }

        void DoNewCodeReviewBehaviorSettings()
        {
            GUILayout.Label(
                PlasticLocalization.Name.NewCodeReviewDefaultBehavior.GetString(),
                UnityStyles.ProjectSettings.SectionTitle);
            EditorGUILayout.Space(2);

            if (EditorGUILayout.Toggle(
                    Styles.NewCodeReviewCreateAndOpenInDesktop,
                    mNewCodeReviewCreateAndOpenInDesktop,
                    new GUIStyle(EditorStyles.radioButton)))
            {
                mNewCodeReviewCreateAndOpenInDesktop = true;
                mNewCodeReviewRequestReviewInUnityCloud = false;
                mNewCodeReviewAskAlways = false;
            }

            if (EditorGUILayout.Toggle(
                    Styles.NewCodeReviewRequestReviewInUnityCloud,
                    mNewCodeReviewRequestReviewInUnityCloud,
                    new GUIStyle(EditorStyles.radioButton)))
            {
                mNewCodeReviewCreateAndOpenInDesktop = false;
                mNewCodeReviewRequestReviewInUnityCloud = true;
                mNewCodeReviewAskAlways = false;
            }

            if (EditorGUILayout.Toggle(
                    Styles.NewCodeReviewAskAlways,
                    mNewCodeReviewAskAlways,
                    new GUIStyle(EditorStyles.radioButton)))
            {
                mNewCodeReviewCreateAndOpenInDesktop = false;
                mNewCodeReviewRequestReviewInUnityCloud = false;
                mNewCodeReviewAskAlways = true;
            }
        }

        static void DrawSettingsSection(Action drawSettings)
        {
            float originalLabelWidth = EditorGUIUtility.labelWidth;

            try
            {
                EditorGUIUtility.labelWidth = UnityConstants.SETTINGS_GUI_WIDTH;

                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.Space(10);

                    using (new EditorGUILayout.VerticalScope())
                    {
                        GUILayout.Space(10);

                        drawSettings();

                        GUILayout.Space(10);
                    }

                    GUILayout.Space(10);
                }
            }
            finally
            {
                EditorGUIUtility.labelWidth = originalLabelWidth;
            }
        }

        class Styles
        {
            internal static GUIContent NewCodeReviewAskAlways =
                new GUIContent(
                    PlasticLocalization.Name.NewCodeReviewAskAlways.GetString(),
                    PlasticLocalization.Name.NewCodeReviewAskAlwaysExplanation.GetString());

            internal static GUIContent NewCodeReviewCreateAndOpenInDesktop =
                new GUIContent(
                    PlasticLocalization.Name.OpenInDesktopApp.GetString(),
                    PlasticLocalization.Name.CreateAndOpenCodeReviewInDesktopExplanation.GetString());

            internal static GUIContent NewCodeReviewRequestReviewInUnityCloud =
                new GUIContent(
                    PlasticLocalization.Name.OpenInUnityCloud.GetString(),
                    PlasticLocalization.Name.RequestCodeReviewFromUnityCloudExplanation.GetString());
        }

        bool mNewCodeReviewCreateAndOpenInDesktop;
        bool mNewCodeReviewRequestReviewInUnityCloud;
        bool mNewCodeReviewAskAlways;
    }
}